Métodos especiales de clase

Constructor y destructor


In [8]:
class Pelicula:
    # Constructor de clase (al crear la instancia)
    def __init__(self,titulo,duracion,lanzamiento):
        self.titulo = titulo
        self.duracion = duracion
        self.lanzamiento = lanzamiento
        print("Se ha creado la película",self.titulo)
        
    # Destructor de clase (al borrar la instancia)
    def __del__(self):
        print("Se está borrando la película", self.titulo)
        
p = Pelicula("El Padrino",175,1972)


Se ha creado la película El Padrino

Al reinstanciar la misma variable se crea de nuevo y se borra la anterior


In [9]:
p = Pelicula("El Padrino",175,1972)


Se ha creado la película El Padrino
Se está borrando la película El Padrino

String

Para devolver una cadena por defecto al convertir un objeto a una cadena con str(objeto):


In [11]:
p


Out[11]:
<__main__.Pelicula at 0x20bb8318fd0>

In [12]:
str(10)


Out[12]:
'10'

In [13]:
str(p)


Out[13]:
'<__main__.Pelicula object at 0x0000020BB8318FD0>'

In [14]:
class Pelicula:
    # Constructor de clase
    def __init__(self,titulo,duracion,lanzamiento):
        self.titulo = titulo
        self.duracion = duracion
        self.lanzamiento = lanzamiento
        print("Se ha creado la película",self.titulo)
        
    # Destructor de clase
    def __del__(self):
        print("Se está borrando la película", self.titulo)
        
    # Redefinimos el método string
    def __str__(self):
        return "{} lanzada en {} con una duración de {} minutos".format(self.titulo,self.lanzamiento,self.duracion)
        
p = Pelicula("El Padrino",175,1972)


Se ha creado la película El Padrino

In [15]:
str(p)


Out[15]:
'El Padrino lanzada en 1972 con una duración de 175 minutos'

Length

Para devolver un número que simula la longitud del objeto len(objeto):


In [16]:
len(p)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-16-503cac95e140> in <module>()
----> 1 len(p)

TypeError: object of type 'Pelicula' has no len()

In [17]:
class Pelicula:
    # Constructor de clase
    def __init__(self,titulo,duracion,lanzamiento):
        self.titulo = titulo
        self.duracion = duracion
        self.lanzamiento = lanzamiento
        print("Se ha creado la película",self.titulo)
        
    # Destructor de clase
    def __del__(self):
        print("Se está borrando la película", self.titulo)
        
    # Redefinimos el método string
    def __str__(self):
        return "{} lanzada en {} con una duración de {} minutos".format(self.titulo,self.lanzamiento,self.duracion)
    
    # Redefinimos el método length
    def __len__(self):
        return self.duracion
        
p = Pelicula("El Padrino",175,1972)
len(p)


Se ha creado la película El Padrino
Se está borrando la película El Padrino
Out[17]:
175